/*
 * day01.h
 *  Created on: 2016年8月27日
 *      Author: LongShu
 */

#ifndef DAY01_H_
#define DAY01_H_

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#include "../utils/memory.h"
#include "../utils/stringUtils.h"
#include "../utils/utils.h"

static char input[16]; // 保存输入数据

void inputInteger(char* msg) {
	println(%s, msg);
	while (1) {
		gets(input);
		if (TYPE_INTEGER != is_number(input)) {
			break;
		}
		println([%s]不是数, input);
		continue;
	}
}

void inputFloat(char* msg) {
	println(%s, msg);
	while (1) {
		gets(input);
		int r = is_number(input);
		if (TYPE_FLOAT == r || TYPE_INTEGER == r) {
			break;
		} else {
			println([%s]不是小数, input);
			continue;
		}
	}
}

/*
 * 习题1,输入三角形的三边长，判断三角形的类型
 */
void ex01() {
	int edge[3];
	for (int i = 0; i < sizeofArray(edge); ++i) {
		println(输入第 % d条边, i + 1);
		gets(input);
		if (!is_number(input)) { //非数字
			--i;
			println([%s]不是数, input);
			continue;
		}
		edge[i] = atof(input);
	}
	//排序
	SORT(edge, sizeofArray(edge), float);
	printArray(edge, 3);
	//判边
	if ((edge[0] + edge[1]) > edge[2] && (edge[0] - edge[1]) < edge[2]) {
		if (edge[0] == edge[1] && edge[0] == edge[2]) {
			println(全等三角形);
			return;
		}
		if (edge[0] == edge[1]) {
			println(等腰三角形);
			return;
		}
		if (((edge[0] * edge[0]) + (edge[1] * edge[1]))
				== (edge[2] * edge[2])) {
			println(直角三角形);
			return;
		}
		if (((edge[0] * edge[0]) + (edge[1] * edge[1])) < (edge[2] * edge[2])) {
			println(钝角三角形);
			return;
		} else {
			println(锐角三角形);
		}
	} else {
		println(不是三角形);
	}
}

/*
 *	练习2-4,排序/或取最大值
 */
void ex02_04() {
	int size = 0;
	int *p = MALLOC(size, int);
	println("输入N个数,#结束");
	while (1) {
		gets(input);
		if (strcmp("#", input) == 0)
			break;
		if (TYPE_INTEGER != is_number(input)) {
			println(%s不是数, input);
			continue;
		}
		size++;
		realloc(p, size);
		p[size - 1] = atoi(input);
	}
//	int size = random(2, 4);
//初始化值//随机数无法完成,因为不完全随机
//	for (int i = 0; i < size; ++i) {
//		p[i] = random(-10, 100);
//	}
	printArray(p, size);
	SORT(p, size, int);
	println(排序后:);
	printArray(p, size);
	println(最大值 % d, p[size - 1]);
	free(p);
}

/*
 * 输入一个整型成绩分数，显示它的等级
 */
void ex05() {
	inputInteger("输入一个[0,100]的分数");
	int score = atoi(input);
	int level = score / 10;
	if (level < 0 || level > 10) {
		println(错误的分数);
	}
	if (level < 6) {
		println(E);
	} else if (6 == level) {
		println(D);
	} else if (7 == level) {
		println(C);
	} else if (8 == level) {
		println(B);
	} else if (level < 10) {
		println(A);
	}
}

void ex06() {
	inputInteger("输入一个数");
	int x = atoi(input);
	int y;
	if (x < 0 && x > -5) {
		y = 5 * x;
	} else if (0 == x) {
		//y = 3 * x - 1;
		y = -1;
	} else if (x < 10) {
		y = 2 * x + 1;
	} else {
		println(无对应函数);
		return;
	}
	println(y=%d, y);
}

void ex07() {
	char* months[12] = { };
	inputInteger("输入一个[1,12]数");
	int month = atoi(input);
	println(%s, months[month - 1]);
}

/*
 * 输出所有闰年
 */
void ex09() {
	int count = 0;
	println(%s, "[2000,3000]的闰年");
	for (int year = 2000; year <= 3000; ++year) {
		if (leapYear(year)) {
			println(%d, year);
			year += 3;
			count++;
		}
	}
	println(一共有%d个, count);
}

void ex10() {
	inputFloat("输入总价格");
	double price = atof(input);
	if (price > 100 && price < 200) {
		price = price * 0.95;
	} else if (price >= 200 && price < 500) {
		price = price * 0.90;
	} else if (price >= 500) {
		price = price * 0.85;
	}
	println(最后价格%lf, price);
}

void ex11() {
	int area = 150;
	int r = 0;
	double temp = area / PI;
	r = sqrt(temp);
	println(r*r=%lf r~=%d, temp, r);
}

void ex13() {
	for (int i = 100; i <= 300; ++i) {
		if ((i % 6 == 0) || (i % 9 == 0)) {
			continue;
		}
		println(%d, i);
	}

}

/*
 * 求10！的值
 */
void ex14() {
	long sum = factorial_iteration(10);
	println(10!=%ld, sum);
}
#endif /* DAY01_H_ */
